\co Macro package for misc DIY Assembler glue code
\co
\include "m/sharedass"
\co
;*
;* RISC OS / ARM assembler glue code for DOOM; autogenerated, do not modify
;* (C) 1998 Andreas Dehmel.
;*

DefineRegisters

;	IDFN	(C) 1998 by Andreas Dehmel


DefineFunction(ReadMonotonicTime)
	swi	0x20042		; XOS_ReadMonotonicTime
ReturnFromLR


DefineFunction(LowerCaseTable)
	mvn	r0,#0
	swi	0x63057		; XTerritory_LowerCaseTable
ReturnFromLR


DefineFunction(ReadFileInfo)
	stmdb	sp!, {r4-r6}
	mov	r6, r1
	mov	r1, r0
	mov	r0, #0x11
	swi	0x20008		; XOS_File
	stmia	r6, {r2-r5}
	ldmia	sp!, {r4-r6}
ReturnFromLR


DefineFunction(SetFiletype)
	mov	r2, r1
	mov	r1, r0
	mov	r0, #0x12
	swi	0x20008
ReturnFromLR


DefineFunction(ChangeEscapeEffect)
	mov	r2, r1		; r0 eor, r1 and
	mov	r1, r0
	mov	r0, #0xc8
	swi	0x20006		; XOS_Byte 200
	mov	r0, r1
ReturnFromLR


screen_desc_base	EQU	0
screen_desc_size	EQU	4
screen_desc_resx	EQU	8
screen_desc_resy	EQU	12

DefineFunction(ReadScreenInfo)
	mov	r3, r0
	swi	0x75240
	stmia	r3, {r0, r1}
	mvn	r0, #0
	mov	r1, #0x0b
	swi	0x20035		; XOS_ReadModeVariable
	add	r2, r2, #1
	str	r2, [r3, #screen_desc_resx]
	mov	r1, #0x0c
	swi	0x20035
	add	r2, r2, #1
	str	r2, [r3, #screen_desc_resy]
ReturnFromLR


DefineFunction(PrepareWithoutFrames)
	mov	r3, r0			; r0 *frame_buffer
	mov	r0, #0x03000000
	mov	r1, #0			; use first screen
	stmdb	sp!, {r0, r1}
	mov	r0, #22
	add	r1, sp, #3
	swi	0x20007
	add	sp, sp, #8
	swi	0x20036
	mov	r0, #0
ReturnFromLR


DefineFunction(ScanKeyboard)
	mov	r1, r0			; R0 = low tide mark of internal key number
	mov	r0, #0x79
	swi	0x20006
	mov	r0, r1
ReturnFromLR


DefineFunction(FlushABuffer)
	mov	r1, r0
	mov	r0, #0x15
	swi	0x20006
ReturnFromLR


DefineFunction(InsertInBuffer)
	mov	r2, r1
	mov	r1, r0
	mov	r0, #0x8a
	swi	0x20006
	movcc	r0, #0
	movcs	r0, #1
ReturnFromLR


DefineFunction(WaitForVSync)
	mov	r0, #0x13
	swi	0x20006
ReturnFromLR


DefineFunction(HomeCursor)
	swi	0x11e			; VDU 30
ReturnFromLR


DefineFunction(ReadMouseState)
	str	r4, [sp, #-4]!
	mov	r4, r0
	swi	0x2001c			; XOS_Mouse
	stmia	r4, {r0-r3}
	ldr	r4, [sp], #4
ReturnFromLR


DefineFunction(PutMouseAt)
	mov	r2, #3
	orr	r2, r2, r0, lsl #8
	bic	r2, r2, #0xff000000
	orr	r2, r2, r1, lsl #0x18
	mov	r3, r1, lsr #8
	stmdb	sp!, {r2, r3}
	mov	r0, #0x15
	mov	r1, sp
	swi	0x20007
	add	sp, sp, #8
ReturnFromLR


DefineFunction(ReadProcessorRegisters)
	stmia	r0, {r4-r9}		; write current registers into kernel_unwind block
	str	fp, [r0, #24]
	str	sp, [r0, #28]
	str	lr, [r0, #32]		; use lr instead of pc! we want pc of caller.
	str	sl, [r0, #36]
ReturnFromLR


DefineFunction(ReadExceptionRegisters)
	stmdb	sp!,{r14}		; read registers as stored by the
	MOV	r0,#7			; C runtime exception handler
	MOV	r1,#0
	MOV	r2,#0
	MOV	r3,#0
	SWI	&20040 ; XOS_ChangeEnvironment;
	MOVVS	r0,#0
	MOVVC	r0,r3
PopAndReturn0


DefineFunction(WimpReadSlotSize)
	str	r4, [sp, #-4]!
	mvn	r0, #0
	mvn	r1, #0
	swi	0x400ec
	ldr	r4, [sp], #4
ReturnFromLR


DefineFunction(RunningIn32bitMode)
	teq	r0, r0
	teq	pc, pc
	moveq	r0, #1
	moveq	pc, lr
	mov	r0, #0
	movs	pc, lr



	END
